package com.luych.toolbox.data.service.core;

import com.luych.toolbox.common.enums.DataSourceType;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.util.Collection;
import java.util.List;
import java.util.Map;

public interface CoreConnection {

    DataSourceType getDataSourceType();

    CoreDatabase getDatabase();

    DataSource getDataSource();

    default void execute(String sql) {
        new JdbcTemplate(this.getDataSource()).update(sql);
    }

    default void execute(String sql, Object... args) {
        new JdbcTemplate(this.getDataSource()).update(sql, args);
    }

    default void execute(String sql, Collection<Object> args) {
        this.execute(sql, args.toArray(new Object[0]));
    }

    default List<Map<String, Object>> query(String sql) {
        return new JdbcTemplate(this.getDataSource()).queryForList(sql);
    }

    default List<Map<String, Object>> query(String sql, Object... args) {
        return new JdbcTemplate(this.getDataSource()).queryForList(sql, args);
    }

    default List<Map<String, Object>> query(String sql, Collection<Object> args) {
        return this.query(sql, args.toArray(new Object[0]));
    }

    default void ping() {
        this.query("select 1");
    }

}
